<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL EXT_float_blend Conformance Tests</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"></script>
<script src="../../js/tests/ext-float-blend.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
"use strict";
description("This test verifies the functionality of the EXT_float_blend extension, if it is available.");

var wtu = WebGLTestUtils;
var canvas = document.getElementById("canvas");
var gl = wtu.create3DContext(canvas);
var ext = null;

function extFloatBlendTests(version, config) {
    debug("");
    debug("Testing float32 blending without EXT_float_blend");
    testExtFloatBlend(config.internalFormat);
    testExtFloatBlendMRT(version, config.drawBuffers);
    testExtFloatBlendNonFloat32Type(version, config.oesTextureHalfFloat);

    const floatBlend = gl.getExtension("EXT_float_blend");
    if (!floatBlend) {
        testPassed("EXT_float_blend is allowed to be missing.");
        return;
    }

    debug("");
    debug("Testing that float32 blending is allowed with EXT_float_blend");
    testExtFloatBlend(config.internalFormat);
    testExtFloatBlendMRT(version, config.drawBuffers);
    testExtFloatBlendNonFloat32Type(version, config.oesTextureHalfFloat);
}

(function(){
    if (wtu.getDefault3DContextVersion() < 2) {
        const oesTextureFloat = gl.getExtension("OES_texture_float");
        if (!oesTextureFloat) {
            testPassed("OES_texture_float is allowed to be missing.");
            return;
        }

        const colorBufferFloat = gl.getExtension("WEBGL_color_buffer_float");
        if (!colorBufferFloat) {
            testPassed("WEBGL_color_buffer_float is allowed to be missing.");
            return;
        }

        const drawBuffers = gl.getExtension("WEBGL_draw_buffers");
        if (!drawBuffers) {
            debug("WEBGL_draw_buffers is allowed to be missing. MRT tests will be skipped.");
        }

        const oesTextureHalfFloat = gl.getExtension("OES_texture_half_float");
        const extColorBufferHalfFloat = gl.getExtension("EXT_color_buffer_half_float");
        const testHalfFloat = !(!oesTextureHalfFloat || !extColorBufferHalfFloat);
        if (!testHalfFloat) {
            debug("OES_texture_half_float or EXT_color_buffer_half_float is allowed to be missing. NonFloat32Type tests will be skipped.");
        }

        const internalFormat = gl.RGBA;
        extFloatBlendTests(1, {
            internalFormat, drawBuffers, oesTextureHalfFloat
        });
    } else {
        const colorBufferFloat = gl.getExtension("EXT_color_buffer_float");
        if (!colorBufferFloat) {
            testPassed("EXT_color_buffer_float is allowed to be missing.");
            return;
        }

        const internalFormat = gl.RGBA32F;
        extFloatBlendTests(2, {
            internalFormat
        });
    }
})();

debug("");
var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>

</body>
</html>
<!--
Copyright (c) 2019 The Khronos Group Inc.
Use of this source code is governed by an MIT-style license that can be
found in the LICENSE.txt file.
-->
